﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.Data.PLinq.Helpers;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.DAO;
using ERP_RORZE_DLL.Product.database;
using System.Text.RegularExpressions;
using ERP_RORZE_PERMISSION.Base;
using ERP_RORZE_SYSTEM;
using ERP_RORZE_TOOL.Common;
using BaseDAO = ERP_RORZE_TOOL.DBAccess.BaseDAO;
using Utilities = ERP_RORZE_TOOL.Common.Utilities;

namespace ERP_RORZE_PRODUCT.Product.WTS
{
    public partial class frm_MachineWTSAdd : DevExpress.XtraEditors.XtraForm
    {
        public event EventHandler Reload;
        ClsWTSDAO clsWTSDAO = new ClsWTSDAO();
        ClsMachineWTSTable b = new ClsMachineWTSTable();
        DataTable dtStaff = new DataTable();
        DataTable dtMOno = new DataTable();
        private bool flagLoadDone;
        private bool dropDown;
        private bool isUpKey = false;
        private bool isOptionId = false;
        private string optionId = string.Empty;

        //Nhung workID khong duoc nhap khi bOrder "J" va la hang F2
        private string[] workNo = new string[] { "PBJ1", "PBN1", "PLJ1", "PLN1", "PMJ1", "PMN1", "PV61" };
        //Nhung ma sau moi duoc nhap OkQty va NGQty
        private string[] workYes = new string[] { "PBJ1", "PBN1", "PMJ1", "PV61", "PLJ1" };

        private List<string> workListNo = new List<string>();
        private List<string> workListYes = new List<string>();
        DataTable dt;
        string PartID;

        INISettings mySetting = new INISettings();
        private SqlConnection myConnection;
        private DataTable dataTable;
        AutoCompleteStringCollection itemMoNo = new AutoCompleteStringCollection();
        private string moNoTemp = string.Empty;
        private LogUtils log;

        public frm_MachineWTSAdd()
        {
            InitializeComponent();
            myConnection = new SqlConnection(mySetting.SQLConnectionString);
            this.txtTime.LostFocus += txtTime_LostFocus;
            this.cbMONo.LostFocus += cbMONo_LostFocus;
            log = new LogUtils();

            foreach (string work in workYes)
            {
                workListYes.Add(work.ToUpper());
            }
            foreach (string work in workNo)
            {
                workListNo.Add(work.ToUpper());
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_MachineWTSInput_Load(object sender, EventArgs e)
        {
            dateDate.Value = DateTime.Now.AddDays(-1);

            //list Shift
            DataTable dtShift = new DataTable();
            dtShift.Columns.Add("Display");
            dtShift.Columns.Add("Value");
            for (int i = 0; i < 4; i++)
            {
                DataRow rShift = dtShift.NewRow();
                rShift["Display"] = i.ToString();
                rShift["Value"] = "T" + i.ToString();
                dtShift.Rows.Add(rShift);
            }
            DataRow row = dtShift.NewRow();
            row["Display"] = "";
            row["Value"] = "";
            dtShift.Rows.InsertAt(row, 0);

            cbShift.DataSource = dtShift;
            cbShift.DisplayMember = "Display";
            cbShift.ValueMember = "Value";

            //list machine
            DataTable dt3;
            dt3 = clsWTSDAO.GetAllMachine();
            DataRow r3 = dt3.NewRow();
            r3["MachineID"] = "";
            dt3.Rows.InsertAt(r3, 0);
            cbMachine.DataSource = dt3;
            cbMachine.DisplayMember = "MachineID";
            cbMachine.ValueMember = "MachineID";

            ////list MO Number
            ////DataTable dt2;
            //dtMOno = clsWTSDAO.GetAllMONo();
            //DataRow r1 = dtMOno.NewRow();
            //r1["MONo"] = "";
            //r1["PartID"] = "";
            //r1["FullName"] = "";
            //dtMOno.Rows.InsertAt(r1, 0);
            //List<ClsMOTable> objs = new List<ClsMOTable>();

            //foreach (DataRow r in dtMOno.Rows)
            //{
            //    ClsMOTable obj = new ClsMOTable();
            //    obj.MONo = r["MONo"].ToString();     ////
            //    obj.PartID = r["PartID"].ToString();  ////
            //    obj.FullName = r["FullName"].ToString();
            //    objs.Add(obj);
            //}
            //cbMONo.DataSource = objs;
            //cbMONo.DisplayMember = "MONo";
            //cbMONo.ValueMember = "MONo";
            BindDataMoNo();


            //list staff
            //DataTable dt4;
            dtStaff = clsWTSDAO.GetAllStaff();
            DataRow r4 = dtStaff.NewRow();
            r4["FullName"] = "";
            r4["StaffID"] = "";
            dtStaff.Rows.InsertAt(r4, 0);
            cbStaff.DataSource = dtStaff;
            cbStaff.DisplayMember = "StaffID";
            cbStaff.ValueMember = "StaffID";

            //list work
            DataTable dt1 = new DataTable();
            dt1 = clsWTSDAO.GetAllWorkMWTS();
            DataRow r2 = dt1.NewRow();
            r2["WorkID"] = "";
            dt1.Rows.InsertAt(r2, 0);
            cbWorkID.DataSource = dt1;
            cbWorkID.DisplayMember = "WorkID";
            cbWorkID.ValueMember = "WorkID";

            //dateDate.Value = DateTime.Now - 1;
            flagLoadDone = true;

        }

        void cbMONo_LostFocus(object sender, EventArgs e)
        {
            if (cbMONo.Text.Trim().Length > 0)
            {
                DataRow[] row = dtMOno.Select("MONo ='" + cbMONo.Text + "'");
                //if (row.Length < 1 && !cbMONo.Text.ToUpper().Equals(moNoTemp.ToUpper()))
                if (row.Length < 1 && !isUpKey)
                {
                    DataTable dtBusOrder =
                        BaseDAO.ExecuteQuery("Select * from [242_BusOder] where MONo='" + cbMONo.Text + "'");
                    if (dtBusOrder.Rows.Count > 0 && (bool)dtBusOrder.Rows[0]["Started"] == false)
                    {
                        cbStaff.Focus();
                        lblMono.Text = string.Empty;
                        MessageBox.Show("Đơn hàng này chưa start.");

                    }
                    else if (dtBusOrder.Rows.Count > 0 && (bool)dtBusOrder.Rows[0]["Started"] == true)
                    {
                        label13.Text = dtBusOrder.Rows[0]["PartID"].ToString();
                        cbMONo.Text = dtBusOrder.Rows[0]["MONo"].ToString();
                        lblMono.Text = dtBusOrder.Rows[0]["PartID"].ToString();

                        dt =
                            BaseDAO.ExecuteQuery(
                                "select [242_MOOption].OptionID from [242_MOOption] where [242_MOOption].MONo = '" +
                                cbMONo.Text + "'  and [242_MOOption].OptionID like 'stg%' GROUP BY OptionID");

                        optionId = cbOption.Text;
                        cbOption.DataSource = dt;
                        cbOption.DisplayMember = "OptionID";
                        cbOption.ValueMember = "OptionID";
                        if (cbMONo.Text.ToUpper().Equals(moNoTemp.ToUpper()))
                            SelectOptionId(dt, true);
                        else
                            SelectOptionId(dt, false);


                    }
                    else
                    {
                        cbStaff.Focus();
                        lblMono.Text = string.Empty;
                        MessageBox.Show("Không có đơn hàng này.");

                    }

                }

                    //else if (cbMONo.Items.Count <= 0 && !cbMONo.Text.Trim().Equals(string.Empty) && !cbMONo.Text.ToUpper().Equals(moNoTemp.ToUpper()))
                else if (cbMONo.Items.Count <= 0 && !cbMONo.Text.Trim().Equals(string.Empty) && !isUpKey)
                {
                    if (row.Length > 0)
                    {
                        label13.Text = row[0]["PartID"].ToString();
                        cbMONo.Text = row[0]["MONo"].ToString();
                        lblMono.Text = row[0]["PartID"].ToString();

                        dt =
                            BaseDAO.ExecuteQuery(
                                "select [242_MOOption].OptionID from [242_MOOption] where [242_MOOption].MONo = '" +
                                cbMONo.Text + "'  and [242_MOOption].OptionID like 'stg%' GROUP BY OptionID");
                        optionId = cbOption.Text;
                        cbOption.DataSource = dt;
                        cbOption.DisplayMember = "OptionID";
                        cbOption.ValueMember = "OptionID";

                        if (cbMONo.Text.ToUpper().Equals(moNoTemp.ToUpper()))
                            SelectOptionId(dt, true);
                        else
                            SelectOptionId(dt, false);
                    }
                }

                //Kiem tra don hang da hoan thanh hay chua va ngay nhap wts
                DataTable dtCheck =
                    BaseDAO.ExecuteQuery(
                        "Select [242_MO].MONo, [242_MO].Finished, [242_MO].Finishdate, [242_BusOder].Change, [242_BusOder].ChangeDate " +
                        "from [242_MO] inner join [242_BusOder] on [242_BusOder].MONo=[242_MO].MONo  where [242_MO].MONo=N'" +
                        cbMONo.Text + "'");

                if (dtCheck.Rows.Count > 0)
                {

                    try
                    {

                        if ((bool)dtCheck.Rows[0]["Finished"] &&
                            !Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) &&
                            DateTime.Compare(dateDate.Value.Date,
                                DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString()).Date) > 0)
                        {
                            MessageBox.Show("Ngày hoàn thành đơn hàng này vào ngày: " +
                                            DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString())
                                                .Date.ToString("dd/MM/yyyy") +
                                            ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                            dateDate.Focus();
                        }

                        else if ((bool)dtCheck.Rows[0]["Finished"] &&
                                 Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) &&
                                 dtCheck.Select("Change like '%cancel%'").Length > 0 &&
                                 DateTime.Compare(dateDate.Value.Date,
                                     DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date) > 0)
                        {
                            MessageBox.Show("Đơn hàng này bị hủy vào ngày: " +
                                            DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString())
                                                .Date.ToString("dd/MM/yyyy") +
                                            ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                            dateDate.Focus();
                        }

                    }
                    catch (Exception)
                    {

                        MessageBox.Show(
                            "Có lỗi khi kiểm tra đơn hàng này, hãy kiểm tra các trường Finished, FinishDate, Change, ChangeDate bảng MO list và BusOrder");
                    }

                }

                moNoTemp = cbMONo.Text;
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            btnAdd.Focus();
            if (GetData())
            {

                if (txtTime.Text == "")
                {
                    MessageBox.Show("Chưa nhập Time");

                }
                else if (float.Parse(txtTime.Text) <= 0)
                {
                    MessageBox.Show("Time phải lớn hơn 0");
                    txtTime.Focus();
                }
                else if (cbWorkID.Text == "")
                {
                    MessageBox.Show("Chưa chọn mã công việc");
                }
                else if (cbMONo.Text == "")
                {
                    MessageBox.Show("Chưa chọn MONo");
                }
                else if (Utilities.IsNullOrEmpty(cbOption.SelectedValue))
                {
                    MessageBox.Show("Chưa chọn Option");
                }
                else if (cbStaff.Text == "")
                {
                    MessageBox.Show("Chưa chọn Staff");
                }
                else if (Utilities.IsNullOrEmpty(cbShift.SelectedValue))
                {
                    MessageBox.Show("chưa nhập Shift");
                }
                else
                {
                    try
                    {
                        if (txtClampTime.Text == "")
                        {
                            txtClampTime.Text = "0";
                        }

                        if (txtProTime.Text == "")
                        {
                            txtProTime.Text = "0";
                        }
                        dt = clsWTSDAO.GetAllOptionIDByMONo(cbMONo.Text, cbOption.SelectedValue.ToString());
                        int i = 0;
                        foreach (DataRow r in dt.Rows)
                        {
                            i++;
                        }
                        if (i == 0)
                        {
                            MessageBox.Show("Nguyên công này không có dữ liệu trong MOOption");
                        }
                        else if (IsNumber(txtClampTime.Text) == false)
                        {
                            MessageBox.Show("Clamtime phải là kiểu số");
                        }
                        else if (IsNumber(txtNGQty.Text) == false)
                        {
                            MessageBox.Show("NGQty phải là kiểu số");
                        }
                        else if (IsNumber(txtOKQty.Text) == false)
                        {
                            MessageBox.Show("OKQty phải là kiểu số");
                        }
                        else if (IsNumber(txtProTime.Text) == false)
                        {
                            MessageBox.Show("Protime phải là kiểu số");
                        }
                        else if (IsNumber(txtTime.Text) == false)
                        {
                            MessageBox.Show("Time phải là kiểu số");
                        }
                        else
                        {
                            int OK = 0;
                            int NG = 0;
                            // số lương OK và NG của nguyên công này  OK: 1, NG :2
                            dt = clsWTSDAO.GetAllVMachineOPTStatusByMONo(cbMONo.Text, cbOption.Text);
                            foreach (DataRow r in dt.Rows)
                            {
                                OK = OK + int.Parse(r["MachineOKQty"].ToString());
                                NG = NG + int.Parse(r["MachineNGQty"].ToString());
                            }

                            int MachineNG = 0;
                            // so luong NG phat sinh ngoai may cho den thoi diem gia cong nguyen cong nay- Chi so 2+5
                            dt = clsWTSDAO.GetAllVMONGByMONo(cbMONo.Text);
                            foreach (DataRow r in dt.Rows)
                            {
                                MachineNG = MachineNG + int.Parse(r["SumofNG"].ToString());
                            }

                            int PreOptionOK = 0;
                            //'Tinh so luong san pham OK cua nguyen cong truoc do-chi so 4
                            dt = clsWTSDAO.GetAllVWTSCheckByMONo(cbMONo.Text, cbOption.Text);
                            foreach (DataRow r in dt.Rows)
                            {
                                PreOptionOK = PreOptionOK + int.Parse(r["MachineOKQty"].ToString());
                            }

                            int intMoQty = 0;
                            //chỉ số 3
                            dt = clsWTSDAO.GetAllMOByMONo(cbMONo.Text);
                            foreach (DataRow r in dt.Rows)
                            {
                                intMoQty = intMoQty + int.Parse(r["MOQty"].ToString());
                            }
                            if (NG + OK + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) > PreOptionOK &&
                                cbOption.Text.Substring(3, 2) != "01" &&
                                int.Parse(txtNGQty.Text) + int.Parse(txtOKQty.Text) > 0)
                            {
                                MessageBox.Show("Số lượng ok của nguyên công này là: " + OK +
                                                ", số lượng NG đã nhập của nguyên công này là: " + NG +
                                                ", NG trên form là: " + txtNGQty.Text + ", OK trên form là: " +
                                                txtOKQty.Text + ", Số lượng OK của nguyên công trước là: " + PreOptionOK);
                            }
                            else if (OK + MachineNG + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) > intMoQty &&
                                     int.Parse(txtNGQty.Text) + int.Parse(txtOKQty.Text) > 0)
                            {
                                MessageBox.Show("Số lượng ok của nguyên công này là: " + OK +
                                                ", số lượng NG đến thời điểm này: " + MachineNG +
                                                ", NG trên form là: " + txtNGQty.Text + ", OK trên form là: " +
                                                txtOKQty.Text + ", Số lượng lệnh chỉ là: " + intMoQty);
                            }
                            else if (label13.Text.Substring(0, 3) == "Jig" && txtNote1.Text == "")
                            {
                                MessageBox.Show("Đây là lệnh gia công đồ gá. Pải nhập tên và số lượng đồ gá");
                            }
                            else if (label13.Text.Substring(0, 3) == "Jig" && cbWorkID.Text.Substring(0, 2) == "FB")
                            {
                                MessageBox.Show("Đây là lệnh gia công đồ gá. Mã công việc không được là FB##");
                            }
                            else if (label13.Text.Substring(0, 3) == "Jig" && cbWorkID.Text.Substring(0, 2) == "PL")
                            {
                                MessageBox.Show("Đây là lệnh gia công đồ gá. Mã công việc không được là PL##");
                            }
                            else if (label13.Text.Substring(0, 3) == "Jig" && cbWorkID.Text.Substring(0, 2) == "PM")
                            {
                                MessageBox.Show("Đây là lệnh gia công đồ gá. Mã công việc không được là PM##");
                            }
                            else if (cbMONo.Text.Substring(0, 1) == "S" && cbWorkID.Text.Substring(0, 2) == "PB")
                            {
                                MessageBox.Show("Đây là lệnh gia công hàng mẫu. Mã công việc không được là PB##");
                            }
                            else if (cbMONo.Text.Substring(0, 1) == "S" && cbWorkID.Text.Substring(0, 2) == "PL")
                            {
                                MessageBox.Show("Đây là lệnh gia công hàng mẫu. Mã công việc không được là PL##");
                            }
                            else if (cbMONo.Text.Substring(0, 1) == "S" && cbWorkID.Text.Substring(0, 2) == "PKJ")
                            {
                                MessageBox.Show("Đây là lệnh gia công hàng mẫu. Mã công việc không được là PKJ#");
                            }
                            //Kiem tra Neu la cong viec truc tiep thi khong duoc nhap vao lenh G
                            else if (checkMGT.Checked == false && cbMONo.Text.Substring(0, 1) == "G")
                            {
                                MessageBox.Show("Mã công việc trực tiếp không được nhập vào lệnh G");
                            }
                            //Kiem tra Neu la cong viec gián tiep thi phải nhap vao lenh G
                            else if (checkMGT.Checked == true && cbMONo.Text.Substring(0, 1) != "G")
                            {
                                MessageBox.Show("Mã công việc gián tiếp phải nhập vào lệnh G");
                            }
                            else
                            {
                                if (OK + MachineNG + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) == intMoQty)
                                {
                                    ClsMOOptionTable bb = new ClsMOOptionTable();
                                    bb.OptionID = cbOption.Text;
                                    bb.MONo = cbMONo.Text.ToUpper();
                                    bb.Finishdate = dateDate.Value;
                                    bb.Shift = cbShift.SelectedValue.ToString();
                                    bb.FinishMachine = cbMachine.Text;
                                    clsWTSDAO.UpdateMOOption(bb);

                                    //write Log
                                    log.Table = LogConstant.Table.Product.MOOption;
                                    log.Task = LogConstant.Task.Update;
                                    log.Description = "MONo: " + bb.MONo + "; OptionID: " + bb.OptionID + "; Finishdate: " + bb.Finishdate +
                                                      "; Shift: " + bb.Shift;
                                    log.WriteLog();

                                    MessageBox.Show("Đã update vào MOOption");
                                }

                                //MessageBox.Show("" + OK + "," + NG + "," + MachineNG + "," + PreOptionOK + "," + intMoQty);
                                //bắt đầu nhập

                                b.Date = dateDate.Value;
                                b.ClampTime = float.Parse(txtClampTime.Text);
                                b.MachineID = cbMachine.Text;
                                b.MONo = cbMONo.Text.ToUpper();
                                b.NGQty = int.Parse(txtNGQty.Text);
                                b.Note1 = txtNote1.Text;
                                b.Note2 = txtNote2.Text;
                                b.OKQty = int.Parse(txtOKQty.Text);
                                b.OptionID = cbOption.Text;
                                b.ProTime = float.Parse(txtProTime.Text);
                                b.Shift = cbShift.SelectedValue.ToString();
                                b.StaffID = cbStaff.SelectedValue.ToString();
                                b.Time = float.Parse(txtTime.Text);
                                b.WorkID = cbWorkID.SelectedValue.ToString();
                                clsWTSDAO.InsertMachineWTS(b);

                                //write Log
                                log.Table = LogConstant.Table.Product.MachineWTS;
                                log.Task = LogConstant.Task.Insert;
                                log.Description = "Date: " + b.Date + "; MONo: " + b.MONo + "; MachineID: " + b.MachineID + "; OptionID: "
                                            + b.OptionID + "; Shift: " + b.Shift + "; WorkID: " + b.WorkID + "; Time: " + b.Time
                                            + "; ProTime: " + b.ProTime + "; ClampTime: " + b.ClampTime;
                                log.WriteLog();

                                //MessageBox.Show("Đã nhập xong");

                                cbWorkID.Text = "";
                                txtClampTime.Text = "0";
                                txtNote1.Text = "";
                                txtNGQty.Text = "0";
                                txtNote2.Text = "";
                                txtOKQty.Text = "0";
                                txtProTime.Text = "0";
                                txtTime.Text = "";
                                txtTotal.Text = "";
                                txtInputed.Text = "";
                                cbWorkID.Focus();
                                //Reload(sender, e);

                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }

        void txtTime_LostFocus(object sender, EventArgs e)
        {
            if (dateDate.Value.ToString() == "")
            {
                MessageBox.Show("Phải nhập Ngày tháng trước");
                txtTime.Text = "";
                dateDate.Focus();
            }
            else if (cbMachine.Text == "")
            {
                MessageBox.Show("Phải nhập Machine trước trước");
                txtTime.Text = "";
                cbMachine.Focus();
            }
            else if (Utilities.IsNullOrEmpty(cbShift.SelectedValue))
            {
                MessageBox.Show("Phải chọn Shift trước");
                txtTime.Text = "";
                cbShift.Focus();
            }
            else
            {
                try
                {
                    dt = clsWTSDAO.GetAllInputTime(cbMachine.Text, dateDate.Value.Day, dateDate.Value.Month, dateDate.Value.Year, cbShift.SelectedValue.ToString());
                    int Inputted = 0;
                    int Total;
                    //Inputted = int.Parse(dt.Rows[0]["TimeOfSum"].ToString());
                    foreach (DataRow r in dt.Rows)
                    {
                        Inputted = Inputted + int.Parse(r["TimeOfSum"].ToString());
                    }
                    Total = Inputted + int.Parse(txtTime.Text);
                    txtTotal.Text = "" + Total;
                    txtInputed.Text = "" + Inputted;
                }
                catch { }
            }
        }

        private void cbMONo_SelectedIndexChanged(object sender, EventArgs e)
        {

            //ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
            //label13.Text = obj.PartID.ToString();
            //MessageBox.Show(label13.Text.Substring(1, 1));
            //list  OptionID

            if (flagLoadDone)
            {
                DataRow[] row = dtMOno.Select("MONo ='" + cbMONo.Text + "'");
                //ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
                label13.Text = row[0]["PartID"].ToString();

                //dt = clsWTSDAO.GetAllOptionID(cbMONo.Text );
                dt =
                    BaseDAO.ExecuteQuery("select [242_MOOption].OptionID from [242_MOOption] where [242_MOOption].MONo = '" +
                                         cbMONo.Text + "'  and [242_MOOption].OptionID like 'stg%' GROUP BY OptionID");
                optionId = cbOption.Text;
                cbOption.DataSource = dt;
                cbOption.DisplayMember = "OptionID";
                cbOption.ValueMember = "OptionID";

                if (cbMONo.Text.ToUpper().Equals(moNoTemp.ToUpper()))
                    SelectOptionId(dt, true);
                else
                    SelectOptionId(dt, false);

                lblMono.Text = row[0]["PartID"].ToString();

                //Kiem tra don hang da hoan thanh hay chua va ngay nhap wts
                DataTable dtCheck = BaseDAO.ExecuteQuery("Select [242_MO].MONo, [242_MO].Finished, [242_MO].Finishdate, [242_BusOder].Change, [242_BusOder].ChangeDate " +
                                                 "from [242_MO] inner join [242_BusOder] on [242_BusOder].MONo=[242_MO].MONo  where [242_MO].MONo=N'" + cbMONo.Text + "'");

                if (dtCheck.Rows.Count > 0)
                {

                    try
                    {

                        if ((bool)dtCheck.Rows[0]["Finished"] && !Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && DateTime.Compare(dateDate.Value.Date, DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString()).Date) > 0)
                        {
                            MessageBox.Show("Ngày hoàn thành đơn hàng này vào ngày: " + DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString()).Date.ToString("dd/MM/yyyy") + ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                            dateDate.Focus();
                        }

                        else if ((bool)dtCheck.Rows[0]["Finished"] && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && dtCheck.Select("Change like '%cancel%'").Length > 0 && DateTime.Compare(dateDate.Value.Date, DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date) > 0)
                        {
                            MessageBox.Show("Đơn hàng này bị hủy vào ngày: " + DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date.ToString("dd/MM/yyyy") + ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                            dateDate.Focus();
                        }

                    }
                    catch (Exception)
                    {

                        MessageBox.Show(
                                "Có lỗi khi kiểm tra đơn hàng này, hãy kiểm tra các trường Finished, FinishDate, Change, ChangeDate bảng MO list và BusOrder");
                    }

                }
            }

            moNoTemp = cbMONo.Text;
        }

        private void txtTime_KeyPress(object sender, KeyPressEventArgs e)
        {
            //if (e.KeyChar == 13)
            //{
            //    if (dateDate.Value.ToString() == "")
            //    {
            //        MessageBox.Show("Phải nhập Ngày tháng trước");
            //        txtTime.Text = "";
            //    }
            //    else if (cbMachine.Text == "")
            //    {
            //        MessageBox.Show("Phải nhập Machine trước trước");
            //        txtTime.Text = "";
            //    }
            //    else if (cbShift.Text == "")
            //    {
            //        MessageBox.Show("Phải chọn Shift trước");
            //        txtTime.Text = "";
            //    }
            //    else
            //    {
            //        try
            //        {
            //            dt = clsWTSDAO.GetAllInputTime(cbMachine.Text, dateDate.Value.Day, dateDate.Value.Month, dateDate.Value.Year, cbShift.Text);
            //            int Inputted = 0;
            //            int Total;
            //            //Inputted = int.Parse(dt.Rows[0]["TimeOfSum"].ToString());
            //            foreach (DataRow r in dt.Rows)
            //            {
            //                Inputted = Inputted + int.Parse(r["TimeOfSum"].ToString());
            //            }
            //            Total = Inputted + int.Parse(txtTime.Text);
            //            txtTotal.Text = "" + Total;
            //            txtInputed.Text = "" + Inputted;
            //        }
            //        catch { }
            //    }
            //}
        }

        private void cbWorkID_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbWorkID.SelectedValue.ToString() == "PSN1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PRN1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PON1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PZM1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "P1Z1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PDZ1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PFN1")
            {
                checkMGT.Checked = true;
            }
            else
            {
                checkMGT.Checked = false;
            }
        }

        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // Add controls for which Arrow keys => focus is not required.
            if ((!dropDown && (ActiveControl is TextBox || ActiveControl is System.Windows.Forms.ComboBox || ActiveControl is System.Windows.Forms.DateTimePicker)))
            {
                switch (keyData)
                {
                    case Keys.Up:
                        //case Keys.Down:
                        isUpKey = true;
                        //bool forward = (keyData == Keys.Down);
                        if (this.ProcessTabKey(false))
                        {
                            return true;
                        }

                        break;
                    default:
                        isUpKey = false;
                        break;
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }

        private void cbStaff_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (flagLoadDone)
            {
                try
                {
                    DataRow[] row = dtStaff.Select("StaffID ='" + cbStaff.SelectedValue.ToString() + "'");
                    lblStaff.Text = row[0]["StaffName"].ToString();
                }
                catch (Exception)
                {
                    lblStaff.Text = string.Empty;
                }

            }
        }

        private void txtNote2_Enter(object sender, EventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

        private void txtProTime_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

        private void frm_MachineWTSInput_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.Alt)
            {
                if (e.KeyCode == Keys.D)
                {
                    this.btnAdd.PerformClick();
                }
                else if (e.KeyCode == Keys.Down)
                {
                    //return;
                }
            }
            else if (e.KeyCode == Keys.End)
            {
                btnAdd.Focus();
            }
            else if (e.KeyCode == Keys.Home)
            {
                dateDate.Focus();
            }
        }

        private void cbShift_DropDown(object sender, EventArgs e)
        {
            dropDown = true;
            System.Windows.Forms.ComboBox combo = sender as System.Windows.Forms.ComboBox;

            if (combo.Items.Count <= 0)
            {
                Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
                switch (combo.Name)
                {
                    case "cbMONo":
                        foreach (var item in itemMoNo)
                        {
                            cbMONo.Items.Add(item.ToString());
                        }
                        break;

                }
                Cursor.Current = System.Windows.Forms.Cursors.Default;
            }
        }

        private void cbShift_DropDownClosed(object sender, EventArgs e)
        {
            dropDown = false;
        }

        private void lblMono_MouseDown_1(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

        private void BindDataMoNo()
        {
            myConnection.Open();
            SqlCommand cmd_sql = myConnection.CreateCommand();
            cmd_sql.CommandText = "select MONo,PartID from [242_MO] where Started ='1' AND Finished ='0'";
            SqlDataReader dataReader = cmd_sql.ExecuteReader();
            while (dataReader.Read())
            {
                itemMoNo.Add(dataReader["MONo"].ToString());
            }
            dataReader.Close();
            cmd_sql.Dispose();
            myConnection.Close();

            dtMOno = BaseDAO.ExecuteQuery("select MONo,PartID from [242_MO] where Started ='1' AND Finished ='0'");
            cbMONo.AutoCompleteCustomSource = itemMoNo;

            ////list MO Number
            ////DataTable dt2;
            //dtMOno = clsWTSDAO.GetAllMONo();
            //DataRow r1 = dtMOno.NewRow();
            //r1["MONo"] = "";
            //r1["PartID"] = "";
            //r1["FullName"] = "";
            //dtMOno.Rows.InsertAt(r1, 0);
            //List<ClsMOTable> objs = new List<ClsMOTable>();

            //foreach (DataRow r in dtMOno.Rows)
            //{
            //    ClsMOTable obj = new ClsMOTable();
            //    obj.MONo = r["MONo"].ToString();     ////
            //    obj.PartID = r["PartID"].ToString();  ////
            //    obj.FullName = r["FullName"].ToString();
            //    objs.Add(obj);
            //}
            //cbMONo.DataSource = objs;
            //cbMONo.DisplayMember = "MONo";
            //cbMONo.ValueMember = "MONo";

        }

        private bool GetData()
        {
            //Check valid data

            DataTable dtCheck;

            if (Utilities.IsNullOrEmpty(cbMONo.Text))
            {
                MessageBox.Show(@"Bạn phải chọn MONo", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbMONo.Focus();
                return false;
            }

            dtCheck = BaseDAO.ExecuteQuery("Select MONo, Started  from [242_BusOder] where MONo='" + cbMONo.Text + "'");
            if ((dtCheck.Rows.Count < 1) || (dtCheck.Rows.Count > 0 && (bool)dtCheck.Rows[0]["Started"] == false))
            {
                MessageBox.Show(@"Đơn hàng này chưa start hoặc không có đơn hàng này.");
                cbStaff.Focus();
                lblMono.Text = string.Empty;
                return false;
            }

            //Kiem tra don hang da hoan thanh hay chua va ngay nhap wts
            dtCheck = BaseDAO.ExecuteQuery("Select [242_MO].MONo, [242_MO].Finished, [242_MO].Finishdate, [242_BusOder].Change, [242_BusOder].ChangeDate " +
                                           "from [242_MO] inner join [242_BusOder] on [242_BusOder].MONo=[242_MO].MONo  where [242_MO].MONo=N'" + cbMONo.Text + "'");


            if (dtCheck.Rows.Count > 0)
            {

                try
                {
                    //if (!(bool)dtCheck.Rows[0]["Finished"] && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["ChangeDate"].ToString()))
                    //{
                    //    MessageBox.Show("Đơn hàng này chưa hoàn thành");
                    //}
                    //else
                    //    if ((bool)dtCheck.Rows[0]["Finished"] && !Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["ChangeDate"].ToString()))
                    //    {
                    //        MessageBox.Show("Đơn hàng này đã hoàn thành ngày: " + DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString()).ToString("dd/MM/yyyy"));

                    //    }
                    //    else
                    //        if ((bool)dtCheck.Rows[0]["Finished"] && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && !Utilities.IsNullOrEmpty(dtCheck.Rows[0]["ChangeDate"].ToString()))
                    //        {
                    //            MessageBox.Show("Đơn hàng này đã thay đổi ngày: " + DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).ToString("dd/MM/yyyy"));

                    //        }

                    if ((bool)dtCheck.Rows[0]["Finished"] && !Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && DateTime.Compare(dateDate.Value.Date, DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString()).Date) > 0)
                    {
                        MessageBox.Show(@"Ngày hoàn thành đơn hàng này vào ngày: " + DateTime.Parse(dtCheck.Rows[0]["Finishdate"].ToString()).Date.ToString("dd/MM/yyyy") + ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                        dateDate.Focus();
                        return false;
                    }

                    else if ((bool)dtCheck.Rows[0]["Finished"] && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && dtCheck.Select("Change like '%cancel%'").Length > 0 && DateTime.Compare(dateDate.Value.Date, DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date) > 0)
                    {
                        MessageBox.Show(@"Đơn hàng này bị hủy vào ngày: " + DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date.ToString("dd/MM/yyyy") + ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                        dateDate.Focus();
                        return false;
                    }

                    //else if ((bool)dtCheck.Rows[0]["Finished"] && Utilities.IsNullOrEmpty(dtCheck.Rows[0]["Finishdate"].ToString()) && DateTime.Compare(dateDate.Value.Date, DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date) > 0)
                    //{
                    //    DataRow[] row = dtCheck.Select("Change like '%cancel%'");
                    //    MessageBox.Show("ChangeDate đơn hàng này vào ngày: " + DateTime.Parse(dtCheck.Rows[0]["ChangeDate"].ToString()).Date.ToString("dd/MM/yyyy") + ". \nVì vậy Input Date không thể lớn hơn ngày này được.");
                    //    dateDate.Focus();
                    //    return false;
                    //}

                    if (Utilities.IsNullOrEmpty(cbWorkID.SelectedValue))
                    {
                        MessageBox.Show("Chưa chọn Work");
                        cbWorkID.Focus();
                        return false;
                    }

                    if (Utilities.IsNullOrEmpty(cbMachine.SelectedValue))
                    {
                        MessageBox.Show("Chưa chọn Machine");
                        cbMachine.Focus();
                        return false;
                    }

                    //Kiem tra neu khong la may Weld thi thuc hien
                    dtCheck = BaseDAO.ExecuteQuery("Select [BOderNo], [MONo], [Imported]  from [242_BusOder] where [MONo]='" + cbMONo.Text + "'");
                    string bOrder = dtCheck.Rows[0]["BOderNo"].ToString().Substring(0, 1).ToUpper();
                    if (!cbMachine.SelectedValue.ToString().Substring(0, 2).ToUpper().Equals("WE"))
                    {
                        bool imported = (bool)dtCheck.Rows[0]["Imported"];
                        if (bOrder.Equals("J") && !imported)
                        {

                            if (workListNo.Contains(cbWorkID.SelectedValue.ToString().ToUpper()))
                            {
                                MessageBox.Show("Không nhập được mã WorkID này.");
                                cbWorkID.Focus();
                                return false;

                            }

                        }

                        if (!cbMONo.Text.Substring(0, 1).ToUpper().Equals("S"))
                        {
                            if (cbWorkID.SelectedValue.ToString().ToUpper().Equals("PMJ1") || cbWorkID.SelectedValue.ToString().ToUpper().Equals("PMN1"))
                            {
                                MessageBox.Show("Không nhập được mã WorkID này với lệnh đầu \"S\".");
                                cbWorkID.Focus();
                                return false;
                            }

                        }

                        if (!workListYes.Contains(cbWorkID.SelectedValue.ToString().ToUpper()))
                        {
                            if (int.Parse(txtOKQty.Text) > 0 || int.Parse(txtNGQty.Text) > 0)
                            {
                                MessageBox.Show("Không được nhập OKQty và NGQty với mã WorkID này.");
                                cbWorkID.Focus();
                                return false;
                            }

                        }
                    }

                    if (bOrder.Equals("J") && txtNote1.Text.Trim().Equals(string.Empty) && !cbMachine.Text.Trim().ToUpper().Equals("KOCO"))
                    {
                        MessageBox.Show(@"Lệnh Jig phải nhập Note1.");
                        txtNote1.Focus();
                        return false;
                    }

                    if (lblMono.Text.Trim().Length > 0)
                    {
                        dtCheck = BaseDAO.ExecuteQuery("select [242_OptionData].PartID, [242_OptionData].OptionID from [242_OptionData] where PartID='" + lblMono.Text.Trim() + "'");
                        if (dtCheck.Select("OptionID = '" + cbOption.Text + "'").Length == 0)
                        {
                            MessageBox.Show(@"Không có nguyên công này trong bảng OptionData.");
                            cbOption.Focus();
                            return false;
                        }
                    }
                    else
                    {
                        MessageBox.Show(@"Tên chi tiết không có nên không kiểm tra được nguyên công. Vui lòng xem lại.");
                        cbOption.Focus();
                        return false;
                    }



                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                    return false;
                }

            }

            return true;
        }

        private void dateDate_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                cbShift.Focus();
            }
        }

        private void SelectOptionId(DataTable dt, bool isSameMono)
        {
            if (cbOption.Items.Count > 0 && isSameMono)
            {
                foreach (DataRow drow in dt.Rows)
                {
                    string tem = drow["OptionID"].ToString();
                    if (drow["OptionID"].ToString().ToUpper().Equals(optionId.ToUpper()))
                    {
                        cbOption.SelectedValue = drow["OptionID"].ToString();
                        isOptionId = true;
                        break;
                    }
                }

                if (!isOptionId)
                {
                    cbOption.SelectedItem = cbOption.Items[0];
                }

                optionId = cbOption.Text;
                isOptionId = false;
            }
            else if (cbOption.Items.Count > 0 && !isSameMono)
            {
                cbOption.SelectedItem = cbOption.Items[0];

                optionId = cbOption.Text;
                isOptionId = false;
            }
            else
            {
                cbOption.Text = string.Empty;
            }
        }

    }

    public class OptionId
    {
        public string OptionID { get; set; }
    }

}